home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / sun4c.md / old / cpu.addrs.h < prev    next >
C/C++ Source or Header  |  1990-12-19  |  8KB  |  184 lines

  1. /*
  2.  * cpu.addrs.h
  3.  *
  4.  * @(#)cpu.addrs.h 1.3 88/02/08 SMI
  5.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  6.  *
  7.  * Memory Addresses of interest in the Sun-4 Monitor memory map.
  8.  *
  9.  * Since "sunromvec.h" is exported to the world, a change invalidates all 
  10.  * object programs that use it (e.g. stand-alone diagnostics, demos, boot 
  11.  * code, etc.) until they are re-compiled with the new version of include
  12.  * file "sunromvec.h".  As a transition aid, it is often useful to specially
  13.  * map the old "sunromvec" location(s) so they also work.
  14.  */
  15.  
  16. /*
  17.  * Address Space Identifier.  Formerly function codes in 68000 land.
  18.  */
  19. /*#define ASI_CTL 0x2 /* control space       */
  20. /*#define ASI_SM  0x3 /* segment map         */
  21. /*#define ASI_PM  0x4 /* page map            */
  22. /*#define ASI_UP  0x8 /* user program        */
  23. /*#define ASI_SP  0x9 /* supervisor program  */
  24. /*#define ASI_UD  0xA /* user data           */
  25. /*#define ASI_SD  0xB /* supervisor data     */
  26. /*#define ASI_FCS 0xC /* flush cache segment */
  27. /*#define ASI_FCP 0xD /* flush cache page    */
  28. /*#define ASI_FCC 0xE /* flush cache context */
  29. /*#define ASI_CD  0xF /* cache data          */
  30.  
  31. /*
  32.  * According to the architecture manual, the three uppermost (most 
  33.  * significant) virtual address bits must be equal (either "000" or 
  34.  * "111").  Therfore, virtual addresses 0x20000000 through 0xdfffffff,
  35.  * inclusive, are illegal.
  36.  */
  37. #define INVALID_ADDRESS_START 0x20000000
  38. #define INVALID_ADDRESS_END   0xE0000000
  39.  
  40. /*
  41.  * The following define the base addresses in mappable memory where
  42.  * the various devices and forms of memory are mapped in when the EPROM
  43.  * Monitor powers up.  On-going operation of the monitor requires that
  44.  * these locations remain mapped as they were.
  45.  */
  46. #define    KEYBMOUSE_BASE    ((struct zscc_device *)     0xFFD00000) /*   On     */
  47. #define    SERIAL0_BASE    ((struct zscc_device *)     0xFFD02000) /*  board   */
  48. #define    EEPROM_BASE    ((unsigned char *)     0xFFD04000) /*  input   */
  49. #define    CLOCK_BASE    ((struct intersil7170 *) 0xFFD06000) /*   and    */
  50. #define    MEMORY_ERR_BASE    ((struct memreg *)     0xFFD08000) /*  output  */
  51. #define    INTERRUPT_BASE    ((unsigned char *)     0xFFD0A000) /* devices. */
  52. #define    ETHER_BASE    ((struct obie_device *)     0xFFD0C000)
  53. #define    ETHER_CR_BASE    ((unsigned char *)     0xF6000000)
  54. #define    COLORMAP_BASE    ((struct obcolormap *)     0xFFD0E000)
  55. #define    AMD_ETHER_BASE    ((struct amd_ether *)     0xFFD10000)
  56. #define    SCSI_BASE    ((struct scsichip *)     0xFFD12000)
  57. #define    DES_BASE    ((struct deschip *)     0xFFD14000)
  58. #define    ECC_CTRL_BASE    ((struct ecc_ctrl *)       0xFFD16000)
  59.  
  60. #define ETHER_CR_INT   (0x10) /* Ethernet Control Reg Enable Interrupt bit.  */
  61. #define ETHER_CR_CAT   (0x20) /* Ethernet Control Reg Channel Attention bit. */
  62. #define ETHER_CR_LOOPB (0x30) /* Ethernet Control Reg Loop Back bit.         */
  63. #define ETHER_CR_RESET (0x40) /* Ethernet Control Reg RESET bit.             */
  64.  
  65. #define    VIDEOMEM_BASE ((char *) 0xFFD40000) /* Video memory. */
  66.  
  67. #define ETHER_SCP_OFF 0xfffffff6 /* Virtual address for ethernet SCP. */
  68.  
  69. #ifdef COBRA
  70. #define BW_ENABLE_MEM_BASE    ((char *)    0xFFB00000)
  71. #define BW_ENABLE_MEM_SIZE            0x40000
  72. #define COLOR_FB_BASE        ((char *)    0xFFC00000)
  73. #define COLOR_FB_SIZE                0x100000
  74. #endif COBRA
  75.  
  76. /* 
  77.  * Handy place to map the invalid PMEG.  Also red zone for stack. 
  78.  */
  79. #define    INVPMEG_BASE ((char *) 0xFFD80000)
  80.  
  81. /*
  82.  * Monitor scratch RAM.  One page for the STACK.  
  83.  * One page for the TRAP VECTOR TABLE and FONT TABLE.
  84.  */
  85. #define STACK_BASE          ((char *) 0xFFDC0000)
  86. #define STACK_TOP           ((char *) 0xFFDC2000)
  87. #define TRAP_VECTOR_BASE             (0xFFDC2000)
  88. #define FONT_BASE           ((char *) 0xFFDC2400)
  89.  
  90. #define NUMBER_OF_TRAPS               256
  91. /*
  92.  * These definitions allow easy and accurate access into the TRAP VECTOR TABLE.
  93.  */
  94. #define HARD_RESET                    (TRAP_VECTOR_BASE)
  95. #define INSTRUCTION_ACCESS_EXCEPTION  (TRAP_VECTOR_BASE+4)
  96. #define ILLEGAL_INSTRUCTION           (TRAP_VECTOR_BASE+2*4)
  97. #define PRIVELEGED_INSTRUCTION        (TRAP_VECTOR_BASE+3*4)
  98. #define FP_DISABLED                   (TRAP_VECTOR_BASE+4*4)
  99. #define WINDOW_OVERFLOW               (TRAP_VECTOR_BASE+5*4)
  100. #define WINDOW_UNDERFLOW              (TRAP_VECTOR_BASE+6*4)
  101. #define MEMORY_ADDRESS_NOT_ALIGNED    (TRAP_VECTOR_BASE+7*4)
  102. #define FP_EXCEPTION                  (TRAP_VECTOR_BASE+8*4)
  103. #define DATA_ACCESS_EXCEPTION         (TRAP_VECTOR_BASE+9*4)
  104. #define TAG_OVERFLOW                  (TRAP_VECTOR_BASE+10*4)
  105. #define INTERRUPT_LEVEL_1             (TRAP_VECTOR_BASE+17*4)
  106. #define INTERRUPT_LEVEL_2             (TRAP_VECTOR_BASE+18*4)
  107. #define INTERRUPT_LEVEL_3             (TRAP_VECTOR_BASE+19*4)
  108. #define INTERRUPT_LEVEL_4             (TRAP_VECTOR_BASE+20*4)
  109. #define INTERRUPT_LEVEL_5             (TRAP_VECTOR_BASE+21*4)
  110. #define INTERRUPT_LEVEL_6             (TRAP_VECTOR_BASE+22*4)
  111. #define INTERRUPT_LEVEL_7             (TRAP_VECTOR_BASE+23*4)
  112. #define INTERRUPT_LEVEL_8             (TRAP_VECTOR_BASE+24*4)
  113. #define INTERRUPT_LEVEL_9             (TRAP_VECTOR_BASE+25*4)
  114. #define INTERRUPT_LEVEL_10            (TRAP_VECTOR_BASE+26*4)
  115. #define INTERRUPT_LEVEL_11            (TRAP_VECTOR_BASE+27*4)
  116. #define INTERRUPT_LEVEL_12            (TRAP_VECTOR_BASE+28*4)
  117. #define INTERRUPT_LEVEL_13            (TRAP_VECTOR_BASE+29*4)
  118. #define INTERRUPT_LEVEL_14            (TRAP_VECTOR_BASE+30*4)
  119. #define INTERRUPT_LEVEL_15            (TRAP_VECTOR_BASE+31*4)
  120. #define SETBUS                        (TRAP_VECTOR_BASE+254*4)
  121. #define ABORT                         (TRAP_VECTOR_BASE+255*4)
  122.  
  123. /*
  124.  * RAM page used to hold the valid main memory pages bitmap if memory
  125.  * fails self-test.  This will be mapped invalid if memory was all OK.
  126.  */
  127. #define    MAINMEM_BITMAP ((char *) 0xFFDC2000) /* ??? WRONG! chg later. */
  128.  
  129. /*
  130.  * Roughly 512K for mapping in devices and main memory during boot.
  131.  * Mapped invalid otherwise (to Invalid PMEG if a whole pmeg invalid).
  132.  */
  133. #define    BOOTMAP_BASE ((char *) 0xFFDC4000) /* ??? WRONG! chg later. */
  134.  
  135. /*
  136.  * Location of EPROM code.  The system executes out of these addresses.
  137.  * If the value of "PROM_BASE", defined below, is changed, several other
  138.  * changes are required.  A complete list of required changes is given below.
  139.  *      (1) Makefile:             RELOC=
  140.  *      (2) ../h/sunromvec.h:     #define romp
  141.  */
  142. #define    PROM_BASE ((struct sunromvec *) 0xFFE80000)
  143.  
  144. /*
  145.  * First hardware virtual address where DVMA is possible.
  146.  * The Monitor does not normally use this address range, but 
  147.  * does use it during bootstrap, via the resalloc() routine.
  148.  */
  149. #define    DVMA_BASE ((char *) 0xFFF00000)
  150.  
  151. /*
  152.  * The Monitor maps only as much main memory as it can detect.  The rest
  153.  * of the address space (up through the special addresses defined above)
  154.  * is mapped as invalid.
  155.  *
  156.  * The last pmeg in the page map is always filled with PME_INVALID
  157.  * entries.  This pmeg number ("The Invalid Pmeg Number") can be used to
  158.  * invalidate an entire segment's worth of memory.
  159.  *        B E   C A R E F U L !
  160.  * If you change a page map entry in this pmeg, you change it for thousands
  161.  * of virtual addresses.  (The standard "getpagemap"/"setpagemap" routines
  162.  * will cause a trap if you attempt to write a valid page map entry to this
  163.  * pmeg, but you could do it by hand if you really wanted to mess things up.)
  164.  *
  165.  * Because there is eight times as much virtual memory space in a single 
  166.  * context as there are total pmegs to map it with, much of the monitor's
  167.  * memory map must be re-mappings of the same pmegs.  Specifically, 
  168.  * NSEGMAP/NUMPMEGS different segment table entries map to each pmeg 
  169.  * of the page table.  There is no reason to duplicate useful addresses, 
  170.  * and several reasons not to, so we map the extra virtual address space 
  171.  * with the Invalid Pmeg Number.  This means that some of the address space 
  172.  * has their own page map entries, and the other part all shares the one 
  173.  * Invalid pmeg.  Remember this when trying to map things; if the address 
  174.  * you want is seg-mapped to the Invalid pmeg, you had better find it a 
  175.  * pmeg before you set a page map entry.
  176.  *
  177.  * The Monitor always uses page map entry PME_INVALID to map an invalid
  178.  * page, although the only relevant bits are the (nonzero) permission bits
  179.  * and the (zero) Valid bit.  PME_INVALID is defined in ./structconst.h,
  180.  * which is generated by the Monitor makefile.
  181.  */
  182. #define    SEG_INVALID NUMPMEGS-1
  183. #define EEPROM ((struct eeprom *) 0xFFD04000)
  184.